
/*1、 将一个函数推迟到代码中所书写的下一个同步方法执行完毕*/

// 方法一：setTimeout, 时间参数指定为0
/*function foo(){
	console.log("foo");
}
setTimeout(foo, 0);
console.log("bar");*/

/*
bar
foo
*/



// 方法二：nextTick
// nextTick方法中指定的函数的调用速度要比setTimeout方法中指定的函数的调用速度快很多
/*function foo(){
	console.log("foo");
}
process.nextTick(foo);
console.log('bar');*/

/*
bar
foo
*/



/*使用场景--使用nextTick方法指定一个函数在一个同步方法执行完毕时被调用*/
/*var fs = require('fs');
var finish = function(){
	console.log("文件读取完毕");
}
process.nextTick(finish);
console.log(fs.readFileSync('./argv.js').toString());*/

/*
process.argv.forEach(function(val, index, array) {
        console.log(index + ": " + val);
});
文件读取完毕
*/






/*2、 将一个函数推迟到代码中所书写的下一个异步方法的事件回调函数开始执行时调用*/
// 因此，可以使用该方法指定两个耗时操作同步进行

var fs = require('fs');
function foo(){
	function beginAnotherTask(){
		var file = fs.createReadStream('./angular.min.js');
		file.on('data', function(data){
			console.log("22read data length: " + data.length);
		});
	}
	process.nextTick(beginAnotherTask);
}

var file = fs.createReadStream('./angular.min.js');
file.on('data', function(data){
	console.log("11read data length: " + data.length);
});

foo();

/*
11read data length: 65536
22read data length: 65536
11read data length: 35784
22read data length: 35784
*/

// 两个读取应用程序目录下的angular.min.js文件的操作同步进行，
// 且未被指定在beginAnotherTask函数中的操作事项执行（因为两个操作是读取同一个文件）




/*3、通过nextTick实现递归*/
// process.nextTick(function foo() {
// 	process.nextTick(foo);
// });
